#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5; // 定义最大数组长度

set<pair<int, int>> S; // 存储(值,索引)对的集合，自动按值排序
int a[MAXN];           // 存储每个元素的计数值

int main() {
  int n, q;              // n-元素数量，q-查询次数
  scanf("%d%d", &n, &q); // 读取n和q
  for (int i = 1; i <= n; ++i)
    S.insert({a[i], i}); // 初始化集合，所有元素初始值为0

  while (q--) { // 处理每个查询
    int x;
    scanf("%d", &x); // 读取查询参数x

    if (x > 0) {
      S.erase(S.find({a[x], x})); // 从集合中移除旧值
      ++a[x];                     // 增加该元素的计数值
      S.insert({a[x], x});        // 将新值插入集合
      printf("%d ", x);
    } else {
      // 如果x为负数或0，处理最小值元素
      /*   int ps = (*S.begin()).second; // 获取当前最小值的索引
        S.erase(S.find({a[ps], ps})); // 从集合中移除旧值
        ++a[ps];                      // 增加该元素的计数值
        S.insert({a[ps], ps});        // 将新值插入集合
        printf("%d ", ps);            // 输出当前处理的元素 */

      auto it = S.begin();
      int pos = (*it).second;
      S.erase(it);
      ++a[pos];
      S.insert({a[pos], pos});
      // S.emplace(a[pos], ps);
      printf("%d", pos);
    }
  }
  return 0;
}